/**
 * 项目名称:
 *
 * @Author: 夏国倩
 * @Date: 2023/10/11 10:23
 * @Copyright
 */
package IO2;
import java.io.*;

public class CopyAll {
    public static void main(String[] args) {
        //拷贝源
        File srcFile = new File("E:\\Java测试\\a");
        //拷贝目录
        File destFile = new File("D:\\a\\b");
        //调用方法拷贝
        copyDir(srcFile, destFile);
    }

    private static void copyDir(File srcFile, File destFile) {
        if (srcFile.isFile()){
            //如果src是文件，递归结束
            //如果是文件的时候需要拷贝
            //....一边读一边写
            FileInputStream in=null;
            FileOutputStream out=null;
            try {
                //E:\Java测试\a
                in=new FileInputStream(srcFile);
                //写道这个文件中
                //d:\a\b\Java测试\a\b
                String path=(destFile.getAbsolutePath().endsWith("\\")? destFile.getAbsolutePath() : destFile.getAbsolutePath()+"\\")+ srcFile.getAbsolutePath().substring(3);
                out=new FileOutputStream(path);
                //一边读一边写
                byte[] bytes=new byte[1024*1024];
                int readCount=0;
                while ((readCount=in.read(bytes)) !=-1){
                    out.write(bytes,0,readCount);
                }
                out.flush();
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            return;
        }
        //获取源目标下的子目录
        File[] files = srcFile.listFiles();
        for (File file:files){
            //获取所有的文件（文件夹）绝对路径
            //System.out.println(srcFile.getAbsolutePath());
            if (file.isDirectory()){
                //如果是文件夹
                //需要新建对应的目录
                //System.out.println(srcFile.getAbsolutePath());
                //E:\Java测试\a\b  源目标
                //E:\a\b\Java测试\a\b   目标目录
                String srcDir=file.getAbsolutePath().substring(3);
                String destDir=(destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\")+srcDir;
                File newFile=new File(destDir);
                if (!newFile.exists()){
                    newFile.mkdirs();
                }
            }
            //调用递归
            copyDir(file,destFile);
        }
    }
}


